
from django.shortcuts import render_to_response
from django.core.exceptions import ObjectDoesNotExist
from comunidadcyt.lineasDeInvestigacion.models import LineasDeInvestigacion
from django.views.generic.create_update import update_object, create_object , delete_object
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.template.context import RequestContext
from comunidadcyt.util.permisos import puedeCrearLineaInv, puedeEditarLineaInv


def obtenerLinea(request,object_id):
    if int(object_id):
        try:
            objetoLinea = LineasDeInvestigacion.objects.get(id=object_id)
        except ObjectDoesNotExist:
            return 'No existe el objeto linea'
    else:
        return 'No existe el objeto linea'
    return objetoLinea

def inicio(request):
    request.breadcrumbs('Lineas de Investigacion', request.path)
    return render_to_response(
        'linea/listarLineas.html',
        {'lineasInv':LineasDeInvestigacion.objects.all().order_by('Nombre_linea'),
         'puedeCrear': puedeCrearLineaInv(request.user)},
        context_instance = RequestContext(request)
    )

def ver(request, object_id):
    linea = obtenerLinea(request, object_id)
    if linea == 'No existe el objeto linea':
        return render_to_response('error.html',{'error':'No existe el objeto linea', 'archivo': 'view de lineas', 'linea': 'linea 19'})

    request.breadcrumbs([('Lineas de Investigacion',reverse(inicio)),('Ver '+linea.Nombre_linea,request.path)])
    return render_to_response(
        'linea/detalles.html',
        {'Linea': linea, 'puedeEditar': puedeEditarLineaInv(request.user)},
        context_instance = RequestContext(request)
    )

def crear(request):
    if puedeCrearLineaInv(request.user):
        request.breadcrumbs([('Lineas de Investigacion',reverse(inicio)),('Crear',request.path)])
        return create_object(
            request,
            model = LineasDeInvestigacion,
            template_name = 'linea/linea.html',
            post_save_redirect = '/comunidadcyt/lineas'
        )

    return HttpResponseRedirect(reverse(inicio))

def editar(request, object_id):
    linea = obtenerLinea(request, object_id)
    if linea == 'No existe el objeto linea':
        return render_to_response('error.html',{'error':'No existe el objeto linea', 'archivo': 'view de lineas', 'linea': 'linea 19'})

    if puedeEditarLineaInv(request.user):
        request.breadcrumbs([('Lineas de Investigacion',reverse(inicio)),('Editar '+linea.Nombre_linea,request.path)])
        return update_object(
            request,
            model = LineasDeInvestigacion,
            template_name = 'linea/linea.html',
            post_save_redirect = '/comunidadcyt/lineas',
            object_id = object_id
        )

    return HttpResponseRedirect(reverse(inicio))

def borrar(request, object_id):
    linea = obtenerLinea(request, object_id)
    if linea == 'No existe el objeto linea':
        return render_to_response('error.html',{'error':'No existe el objeto linea', 'archivo': 'view de lineas', 'linea': 'linea 19'})

    if puedeEditarLineaInv(request.user):
        request.breadcrumbs([('Lineas de Investigacion',reverse(inicio)),('Borrar '+linea.Nombre_linea,request.path)])
        return delete_object(
            request,
            model = LineasDeInvestigacion,
            template_name = 'linea/confirm_delete.html',
            post_delete_redirect = '/comunidadcyt/lineas',
            object_id = object_id
        )

    return HttpResponseRedirect(reverse(inicio))

def obtenerDeptos(linea):
    list_grupos = list(linea.grupos.all())
    list_departamentos = []
    for proyecto in linea.proyectos.all():
        lista = proyecto.Departamentos.all()
        for obj in lista:
            if not list_departamentos.__contains__(obj):
                list_departamentos += [obj]
        for proy in proyecto.Grupos.all():
            if not list_grupos.__contains__(proy):
                list_grupos += [proy]
    for grupo in list_grupos:
        if not list_departamentos.__contains__(grupo.Departamento):
            list_departamentos += [grupo.Departamento]
    return list_departamentos
    
def obtenerGrupos(linea):
    list_grupos = list(linea.grupos.all())
    for proyecto in linea.proyectos.all():
        for proy in proyecto.Grupos.all():
            if not list_grupos.__contains__(proy):
                list_grupos += [proy]
    return list_grupos
    
def obtenerPartners(linea):
    list_partners = []
    for proyecto in linea.proyectos.all():
        for part in proyecto.Partners.all():
            if not list_partners.__contains__(part):
                list_partners += [part] 
    return list_partners

def listardeptos(request, object_id=0):
    linea = obtenerLinea(request, object_id)
    if linea == 'No existe el objeto linea':
        return render_to_response('error.html',{'error':'No existe el objeto linea', 'archivo': 'view de lineas', 'linea': 'linea 19'})

    request.breadcrumbs([('Lineas de Investigacion',reverse(inicio)),('Departamentos '+linea.Nombre_linea,request.path)])
    return render_to_response('linea/deptos.html', {'Linea': linea, 'list_deptos': obtenerDeptos(linea), 'user': request.user}, context_instance=RequestContext(request))

def listargrupos(request, object_id=0):
    linea = obtenerLinea(request, object_id)
    if linea == 'No existe el objeto linea':
        return render_to_response('error.html',{'error':'No existe el objeto linea', 'archivo': 'view de lineas', 'linea': 'linea 19'})

    request.breadcrumbs([('Lineas de Investigacion',reverse(inicio)),('Grupos '+linea.Nombre_linea,request.path)])
    return render_to_response('linea/grupos.html', {'Linea': linea, 'list_grupos': obtenerGrupos(linea), 'user': request.user}, context_instance=RequestContext(request))

def listarproyectos(request, object_id=0):
    linea = obtenerLinea(request, object_id)
    if linea == 'No existe el objeto linea':
        return render_to_response('error.html',{'error':'No existe el objeto linea', 'archivo': 'view de lineas', 'linea': 'linea 19'})

    request.breadcrumbs([('Lineas de Investigacion',reverse(inicio)),('Proyectos '+linea.Nombre_linea,request.path)])
    return render_to_response('linea/proyectos.html', {'Linea': linea, 'list_proyectos': linea.proyectos.all(), 'user': request.user}, context_instance=RequestContext(request))

def listarpartners(request, object_id=0):
    linea = obtenerLinea(request, object_id)
    if linea == 'No existe el objeto linea':
        return render_to_response('error.html',{'error':'No existe el objeto linea', 'archivo': 'view de lineas', 'linea': 'linea 19'})

    request.breadcrumbs([('Lineas de Investigacion',reverse(inicio)),('Partners '+linea.Nombre_linea,request.path)])
    return render_to_response('linea/partners.html', {'Linea': linea, 'list_partners': obtenerPartners(linea), 'user': request.user}, context_instance=RequestContext(request))
